@@ -0,0 +1,39 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from __future__ import division |
|
4 |
+ |
|
5 |
+from django_logit import logit |
|
6 |
+from django_response import response |
|
7 |
+from TimeConvert import TimeConvert as tc |
|
8 |
+ |
|
9 |
+from equipment.models import IsolationPointUserInfo, AntigenMeasureLogInfo |
|
10 |
+ |
|
11 |
+ |
|
12 |
+def upload_antigen(request): |
|
13 |
+ macid = request.POST.get('macid', '') |
|
14 |
+ user_name = request.POST.get('user_name', '') |
|
15 |
+ phone = request.POST.get('phone', 1) |
|
16 |
+ result = request.POST.get('result', 2) |
|
17 |
+ detect_at = request.POST.get('detect_at', '') |
|
18 |
+ |
|
19 |
+ detect_at = tc.string_to_datetime(detect_at, format='%Y-%m-%d %H:%M:%S') |
|
20 |
+ |
|
21 |
+ try: |
|
22 |
+ user = IsolationPointUserInfo.objects.get(fields__icontains=phone, status=True) |
|
23 |
+ user.detect_at = detect_at |
|
24 |
+ user.result = result |
|
25 |
+ user.save() |
|
26 |
+ except IsolationPointUserInfo.DoesNotExist: |
|
27 |
+ user = None |
|
28 |
+ |
|
29 |
+ AntigenMeasureLogInfo.objects.create( |
|
30 |
+ point_id=user.point_id if user else '', |
|
31 |
+ user_id=user.user_id if user else '', |
|
32 |
+ macid=macid, |
|
33 |
+ user_name=user_name, |
|
34 |
+ phone=phone, |
|
35 |
+ result=result, |
|
36 |
+ detect_at=detect_at |
|
37 |
+ ) |
|
38 |
+ |
|
39 |
+ return response(200, '', 'Antigen Upload Success', '抗原检测上传成功') |
@@ -3,7 +3,7 @@ |
||
3 | 3 |
from django.conf.urls import url |
4 | 4 |
|
5 | 5 |
from api import (admin_views, aep_views, eqpt_views, field_views, mini_views, oauth_views, point_views, screen_views, |
6 |
- wx_views) |
|
6 |
+ wx_views, antigen_views) |
|
7 | 7 |
|
8 | 8 |
|
9 | 9 |
urlpatterns = [ |
@@ -47,7 +47,7 @@ urlpatterns += [ |
||
47 | 47 |
url(r'^upload/temperature$', eqpt_views.upload_temperature, name='upload_temperature'), |
48 | 48 |
] |
49 | 49 |
|
50 |
-#Admin |
|
50 |
+# Admin |
|
51 | 51 |
urlpatterns += [ |
52 | 52 |
url(r'^admin/user/result$', point_views.admin_user_results, name='admin_user_results'), |
53 | 53 |
|
@@ -88,3 +88,8 @@ urlpatterns += [ |
||
88 | 88 |
urlpatterns += [ |
89 | 89 |
url(r'^v2/upload/temperature$', aep_views.aep_upload_temperature, name='aep_upload_temperature'), |
90 | 90 |
] |
91 |
+ |
|
92 |
+# Antigen |
|
93 |
+urlpatterns += [ |
|
94 |
+ url(r'^upload/antihelion$', antigen_views.upload_antigen, name='antigen_upload'), |
|
95 |
+] |
@@ -4,7 +4,7 @@ from django.contrib import admin |
||
4 | 4 |
from django_admin import ReadOnlyModelAdmin |
5 | 5 |
|
6 | 6 |
from equipment.models import (AepThermometerMeasureLogInfo, IsolationPointFieldPoolInfo, IsolationPointInfo, |
7 |
- IsolationPointUserInfo, ThermometerEquipmentInfo, ThermometerMeasureLogInfo) |
|
7 |
+ IsolationPointUserInfo, ThermometerEquipmentInfo, ThermometerMeasureLogInfo, AntigenMeasureLogInfo) |
|
8 | 8 |
|
9 | 9 |
|
10 | 10 |
class IsolationPointFieldPoolInfoAdmin(admin.ModelAdmin): |
@@ -33,9 +33,14 @@ class AepThermometerMeasureLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin): |
||
33 | 33 |
list_display = ('imei', 'temperature_src', 'temperature', 'battery', 'status', 'created_at', 'updated_at') |
34 | 34 |
|
35 | 35 |
|
36 |
+class AntigenMeasureLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin): |
|
37 |
+ list_display = ('point_id', 'user_id', 'macid', 'phone', 'user_name', 'result', 'detect_at', 'created_at', 'updated_at') |
|
38 |
+ |
|
39 |
+ |
|
36 | 40 |
admin.site.register(IsolationPointFieldPoolInfo, IsolationPointFieldPoolInfoAdmin) |
37 | 41 |
admin.site.register(IsolationPointInfo, IsolationPointInfoAdmin) |
38 | 42 |
admin.site.register(IsolationPointUserInfo, IsolationPointUserInfoAdmin) |
39 | 43 |
admin.site.register(ThermometerEquipmentInfo, ThermometerEquipmentInfoAdmin) |
40 | 44 |
admin.site.register(ThermometerMeasureLogInfo, ThermometerMeasureLogInfoAdmin) |
41 | 45 |
admin.site.register(AepThermometerMeasureLogInfo, AepThermometerMeasureLogInfoAdmin) |
46 |
+admin.site.register(AntigenMeasureLogInfo, AntigenMeasureLogInfoAdmin) |
@@ -0,0 +1,43 @@ |
||
1 |
+# Generated by Django 3.2.8 on 2022-08-17 06:25 |
|
2 |
+ |
|
3 |
+from django.db import migrations, models |
|
4 |
+ |
|
5 |
+ |
|
6 |
+class Migration(migrations.Migration): |
|
7 |
+ |
|
8 |
+ dependencies = [ |
|
9 |
+ ('equipment', '0027_auto_20220707_1801'), |
|
10 |
+ ] |
|
11 |
+ |
|
12 |
+ operations = [ |
|
13 |
+ migrations.CreateModel( |
|
14 |
+ name='AntigenMeasureLogInfo', |
|
15 |
+ fields=[ |
|
16 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|
17 |
+ ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')), |
|
18 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), |
|
19 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), |
|
20 |
+ ('point_id', models.CharField(blank=True, db_index=True, help_text='隔离点唯一标识', max_length=32, null=True, verbose_name='point_id')), |
|
21 |
+ ('user_id', models.CharField(blank=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')), |
|
22 |
+ ('macid', models.CharField(blank=True, help_text='设备号', max_length=32, null=True, verbose_name='macid')), |
|
23 |
+ ('phone', models.CharField(blank=True, help_text='用户手机号', max_length=11, null=True, verbose_name='phone')), |
|
24 |
+ ('user_name', models.CharField(blank=True, help_text='用户姓名', max_length=255, null=True, verbose_name='user_name')), |
|
25 |
+ ('result', models.IntegerField(choices=[(0, '阴性'), (1, '阳性'), (2, '未知')], default=2, help_text='抗原检测结果', verbose_name='result')), |
|
26 |
+ ('detect_at', models.DateTimeField(blank=True, help_text='检测时间', null=True, verbose_name='detect_at')), |
|
27 |
+ ], |
|
28 |
+ options={ |
|
29 |
+ 'verbose_name': '抗原检测记录信息', |
|
30 |
+ 'verbose_name_plural': '抗原检测记录信息', |
|
31 |
+ }, |
|
32 |
+ ), |
|
33 |
+ migrations.AddField( |
|
34 |
+ model_name='isolationpointuserinfo', |
|
35 |
+ name='antigen_result', |
|
36 |
+ field=models.IntegerField(choices=[(0, '阴性'), (1, '阳性'), (2, '未知')], default=2, help_text='抗原检测结果', verbose_name='antigen_result'), |
|
37 |
+ ), |
|
38 |
+ migrations.AddField( |
|
39 |
+ model_name='isolationpointuserinfo', |
|
40 |
+ name='detect_at', |
|
41 |
+ field=models.DateTimeField(blank=True, help_text='检测时间', null=True, verbose_name='detect_at'), |
|
42 |
+ ), |
|
43 |
+ ] |
@@ -119,6 +119,16 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
119 | 119 |
HAS_YET_UPLOAD = '已上报' |
120 | 120 |
CHG_STA_CHARGING = '充电中' |
121 | 121 |
|
122 |
+ NEGATIVE = 0 |
|
123 |
+ POSITIVE = 1 |
|
124 |
+ UNKNOWN = 2 |
|
125 |
+ |
|
126 |
+ ANTIGEN_RESULT_TYPE = ( |
|
127 |
+ (NEGATIVE, '阴性'), |
|
128 |
+ (POSITIVE, '阳性'), |
|
129 |
+ (UNKNOWN, '未知'), |
|
130 |
+ ) |
|
131 |
+ |
|
122 | 132 |
point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True) |
123 | 133 |
|
124 | 134 |
user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识', db_index=True) |
@@ -138,6 +148,9 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
138 | 148 |
|
139 | 149 |
eqpts = JSONField(_('eqpts'), default=[], blank=True, null=True, help_text='使用设备记录') |
140 | 150 |
|
151 |
+ antigen_result = models.IntegerField(_('antigen_result'), choices=ANTIGEN_RESULT_TYPE, default=UNKNOWN, help_text='抗原检测结果') |
|
152 |
+ detect_at = models.DateTimeField(_('detect_at'), blank=True, null=True, help_text='检测时间') |
|
153 |
+ |
|
141 | 154 |
class Meta: |
142 | 155 |
verbose_name = _('隔离点用户录入信息') |
143 | 156 |
verbose_name_plural = _('隔离点用户录入信息') |
@@ -184,14 +197,16 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
184 | 197 |
'last_submit_at': self.last_submit_at, |
185 | 198 |
'last_report_time': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M') if self.last_submit_at else '', |
186 | 199 |
'remark': self.remark or '', |
200 |
+ 'antigen_result': self.get_antigen_result_display(), |
|
201 |
+ 'detect_at': tc.local_string(utc_dt=self.detect_at, format='%m-%d %H:%M') if self.detect_at else '', |
|
187 | 202 |
} |
188 | 203 |
|
189 | 204 |
@property |
190 | 205 |
def userdata(self): |
191 | 206 |
return { |
192 |
- 'point_id': self.point_id, |
|
193 |
- 'user_id': self.user_id, |
|
194 |
- **{ field.get('key', ''): field.get('value', '') for field in self.fields } |
|
207 |
+ 'point_id': self.point_id, |
|
208 |
+ 'user_id': self.user_id, |
|
209 |
+ **{field.get('key', ''): field.get('value', '') for field in self.fields} |
|
195 | 210 |
} |
196 | 211 |
|
197 | 212 |
|
@@ -296,15 +311,15 @@ class ThermometerMeasureLogInfo(BaseModelMixin): |
||
296 | 311 |
'temperature': self.temperature, |
297 | 312 |
'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'), |
298 | 313 |
} |
299 |
- |
|
314 |
+ |
|
300 | 315 |
@property |
301 | 316 |
def userdata(self): |
302 |
- return { |
|
317 |
+ return { |
|
303 | 318 |
'macid': self.macid, |
304 | 319 |
'sn': self.sn, |
305 | 320 |
'temperature': self.temperature, |
306 | 321 |
'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M'), |
307 |
- } |
|
322 |
+ } |
|
308 | 323 |
|
309 | 324 |
|
310 | 325 |
class AepThermometerMeasureLogInfo(BaseModelMixin): |
@@ -352,3 +367,33 @@ class AepThermometerMeasureLogInfo(BaseModelMixin): |
||
352 | 367 |
|
353 | 368 |
def __unicode__(self): |
354 | 369 |
return self.pk |
370 |
+ |
|
371 |
+ |
|
372 |
+class AntigenMeasureLogInfo(BaseModelMixin): |
|
373 |
+ |
|
374 |
+ NEGATIVE = 0 |
|
375 |
+ POSITIVE = 1 |
|
376 |
+ UNKNOWN = 2 |
|
377 |
+ |
|
378 |
+ ANTIGEN_RESULT_TYPE = ( |
|
379 |
+ (NEGATIVE, '阴性'), |
|
380 |
+ (POSITIVE, '阳性'), |
|
381 |
+ (UNKNOWN, '未知'), |
|
382 |
+ ) |
|
383 |
+ |
|
384 |
+ point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True) |
|
385 |
+ |
|
386 |
+ user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识') |
|
387 |
+ |
|
388 |
+ macid = models.CharField(_('macid'), max_length=32, blank=True, null=True, help_text='设备号') |
|
389 |
+ phone = models.CharField(_('phone'), max_length=11, blank=True, null=True, help_text='用户手机号') |
|
390 |
+ user_name = models.CharField(_('user_name'), max_length=255, blank=True, null=True, help_text='用户姓名') |
|
391 |
+ result = models.IntegerField(_('result'), choices=ANTIGEN_RESULT_TYPE, default=UNKNOWN, help_text='抗原检测结果') |
|
392 |
+ detect_at = models.DateTimeField(_('detect_at'), blank=True, null=True, help_text='检测时间') |
|
393 |
+ |
|
394 |
+ class Meta: |
|
395 |
+ verbose_name = _('抗原检测记录信息') |
|
396 |
+ verbose_name_plural = _('抗原检测记录信息') |
|
397 |
+ |
|
398 |
+ def __unicode__(self): |
|
399 |
+ return self.pk |